/**
 * Created by 白雨浓 on 2018/5/21 17:11.
 *
 * 克隆工具
 */
const clone = {
  /**
   * 对象浅克隆
   * @param obj 对象
   * @param isToString 是否将number型转换为string （主要用于表单）
   * @returns {*}
   */
  simple(obj, isToString) {
    let proto = Object.getPrototypeOf(obj);
    proto = Object.assign({}, Object.create(proto), obj);

    if (!isToString) return proto;
    Object.keys(proto).forEach(key => {
      if (typeof proto[key] === 'number') {
        proto[key] = '' + proto[key];
      }
    });
    return proto;
  },
  /** 全兼容深度克隆 效率低 */
  dep(obj) {
    return JSON.parse(JSON.stringify(obj));
  },
  /** 基础的查询条件(分页) */
  query(query, page) {
    if (!query) {
      query = {};
    }
    query['pageNum'] = page.current;
    query['pageSize'] = page.size;
    return query;
  },
  /** 在ajax后赋值page的值 */
  page(data) {
    return {
      current: data.pageNum === 0 ? 1 : data.pageNum,
      size: data.pageSize === 0 ? 10 : data.pageSize,
      total: data.total
    }
  },
  /** 将数组中的某个key的string型的value转换为Object */
  toJson(data, ...keys) {
    if (data instanceof Array) {
      for (const item of data) {
        for (const key of keys) {
          if (item[key]) {
            item[key] = JSON.parse(item[key]);
          }
        }
      }
      return data;
    } else {
      for (const key of keys) {
        if (data[key]) {
          data[key] = JSON.parse(data[key]);
        }
      }
      return data;
    }
  },
  /** 将数组中的某个key的Object型的value转换为string */
  toString(data, ...keys) {
    for (const item of data) {
      for (const key of keys) {
        item[key] = JSON.stringify(item[key]);
      }
    }
    return data;
  }
};

export default {
  install(Vue) {
    Vue.prototype.$clone = clone;
  }
}
